import pandas as pd
from pyecharts.charts import Map
from pyecharts import options as opts
# 世界国家中英文对字典
name_map = {
    '中国': 'China',
    '蒙古': 'Mongolia',
    '朝鲜': 'Dem.Rep.Korea',
    '韩国': 'Korea',
    '日本': 'Japan',
    '菲律宾': 'Philippines',
    '越南': 'Vietnam',
    '老挝': 'Lao PDR',
    '柬埔寨': 'Cambodia',
    '缅甸': 'Myanmar',
    '泰国': 'Thailand',
    '马来西亚': 'Malaysia',
    '文莱达鲁萨兰国': 'Brunei Darussalam',
    '新加坡': 'Singapore',
    '印度尼西亚': 'Indonesia',
    '东帝汶民主共和国': 'east Timor',
    '尼泊尔': 'Nepal',
    '不丹': 'Bhutan',
    '孟加拉国': 'Bangladesh',
    '印度': 'India',
    '巴基斯坦': 'Pakistan',
    '斯里兰卡': 'Sri Lanka',
    '马尔代夫': 'Maldives',
    '哈萨克斯坦': 'Kazakhstan',
    '吉尔吉斯斯坦': 'Kyrgyzstan',
    '塔吉克斯坦': 'Tajikistan',
    '乌兹别克斯坦': 'Uzbekistan',
    '土库曼斯坦': 'Turkmenistan',
    '阿富汗': 'Afghanistan',
    '伊拉克': 'Iraq',
    '伊朗': 'Iran',
    '叙利亚': 'Syria',
    '约旦': 'Jordan',
    '黎巴嫩': 'Lebanon',
    '以色列': 'Israel',
    '巴勒斯坦': 'Palestine',
    '沙特阿拉伯': 'Saudi Arabia',
    '巴林': 'Bahrain',
    '卡塔尔': 'Qatar',
    '科威特': 'Kuwait',
    '阿拉伯联合酋长国（阿联酋）': 'United Arab Emirates',
    '阿曼': 'Oman',
    '也门': 'Yemen',
    '格鲁吉亚': 'Georgia',
    '亚美尼亚': 'Armenia',
    '阿塞拜疆': 'Azerbaijan',
    '土耳其': 'Turkey',
    '塞浦路斯': 'Cyprus',
    '芬兰': 'Finland',
    '瑞典': 'Sweden',
    '挪威': 'Norway',
    '冰岛': 'Iceland',
    '丹麦': 'Denmark',
    '法罗群岛': 'Faroe Islands',
    '爱沙尼亚': 'Estonia',
    '拉脱维亚': 'Latvia',
    '立陶宛': 'Lithuania',
    '白俄罗斯': 'Belarus',
    '俄罗斯': 'Russia',
    '乌克兰': 'Ukraine',
    '摩尔多瓦': 'Moldova',
    '波兰': 'Poland',
    '捷克': 'Czech',
    '斯洛伐克': 'Slovakia',
    '匈牙利': 'Hungary',
    '德国': 'Germany',
    '奥地利': 'Austria',
    '瑞士': 'Switzerland',
    '列支敦士登': 'Liechtenstein',
    '英国': 'Britain',
    '爱尔兰': 'Ireland',
    '荷兰': 'Holand',
    '比利时': 'Belgium',
    '卢森堡': 'Luxemburg',
    '法国': 'France',
    '摩纳哥': 'Monaco',
    '罗马尼亚': 'Romania',
    '保加利亚': 'Bulgaria',
    '塞尔维亚': 'Serbia',
    '马其顿': 'Macedonia',
    '阿尔巴尼亚': 'Albania',
    '希腊': 'Greece',
    '斯洛文尼亚': 'Slovenia',
    '克罗地亚': 'Croatia',
    '波斯尼亚': 'Bosnia',
    '墨塞哥维那': 'Herzegovina',
    '意大利': 'Italy',
    '梵蒂冈': 'Vatican',
    '圣马力诺': 'San Marino',
    '马耳他': 'Malta',
    '西班牙': 'Spain',
    '葡萄牙': 'Portugal',
    '安道尔': 'Andorra',
    '埃及': 'Egypt',
    '利比亚': 'Libya',
    '苏丹': 'Sudan',
    '南苏丹': 'S. Sudan',
    '突尼斯': 'Tunis',
    '阿尔及利亚': 'Algeria',
    '摩洛哥': 'Morocco',
    '亚速尔群岛': 'Azores',
    '马德拉群岛': 'MADEIRA ISLANDS',
    '埃塞俄比亚': 'Ethiopia',
    '厄立特里亚': 'Eritrea',
    '索马里': 'Somalia',
    '吉布提': 'Djibouti',
    '肯尼亚': 'Kenya',
    '坦桑尼亚': 'Tanzania',
    '乌干达': 'Uganda',
    '卢旺达': 'Rwanda',
    '布隆迪': 'Burundi',
    '塞舌尔': 'Seychelles',
    '乍得': 'Chad',
    '中非': 'Central African Rep.',
    '喀麦隆': 'Cameroon',
    '赤道几内亚': 'Eq. Guinea',
    '加蓬': 'Gabon',
    '刚果': 'Congo',
    '刚果民主共和国': 'Dem.Rep.Congo',
    '尼日利亚': 'Nigeria',
    '圣多美及普林西比': 'Sao Tome and Principe',
    '毛里塔尼亚': 'Mauritania',
    '西撒哈拉': 'W.Sahara',
    '塞内加尔': 'Senegal',
    '冈比亚': 'Gambian',
    '马里': 'Mali',
    '布基纳法索': 'Burkina Faso',
    '几内亚':'Guinea',
    '几内亚比绍': 'Guinea-Bissau',
    '佛得角': 'Cape-Verde',
    '塞拉利昂': 'Sierra Leone',
    '利比里亚': 'Liberia',
    '科特迪瓦': 'Cote dlvoire',
    '加纳': 'Ghana',
    '多哥': 'Togo',
    '贝宁': 'Benin',
    '尼日尔': 'Niger',
    '加那利群岛': 'Canary Islands',
    '赞比亚': 'Zambia',
    '安哥拉': 'Angola',
    '津巴布韦': 'Zimbabwe',
    '马拉维': 'Malawi',
    '莫桑比克': 'Mozambique',
    '博茨瓦纳': 'Botswana',
    '纳米比亚': 'Namibia',
    '南非': 'South Africa',
    '斯威士兰': 'Swaziland',
    '莱索托': 'Lesotho',
    '马达加斯加': 'Madagascar',
    '科摩罗': 'Comorin',
    '毛里求斯': 'Mauritius',
    '留尼旺': 'Reunion',
    '圣赫勒拿': 'Saint Helena',
    '澳大利亚': 'Australia',
    '新西兰': 'New Zealand',
    '巴布亚新几内亚': 'Papua New Guinea',
    '所罗门群岛': 'Solomon ls',
    '瓦努阿图': 'Vanuatu',
    '密克罗尼西亚': 'Micronesia',
    '马绍尔群岛': 'Marshall Islands',
    '帕劳': 'Palau',
    '瑙鲁': 'Nauru',
    '基里巴斯': 'Kiribati',
    '图瓦卢': 'Tuvalu TV',
    '克什米尔': 'Kashmir',
    '萨摩亚': 'Samoa',
    '斐济': 'Fiji',
    '汤加': 'Tonga',
    '库克群岛': 'Cook Islands',
    '关岛': 'Guam',
    '新喀里多尼亚': 'New Caledonia',
    '法属波利尼西亚': 'French Polynesia',
    '皮特凯恩岛': 'Pitcairn Island',
    '瓦利斯与富图纳群岛': 'Wallis/Futuna',
    '纽埃': 'Niue',
    '托克劳': 'Tokelau',
    '美属萨摩亚': 'American Samoa',
    '北马里亚纳': 'Mariana',
    '加拿大': 'Canada',
    '美国': 'United States',
    '墨西哥': 'Mexico',
    '格陵兰': 'Greenland',
    '危地马拉': 'Guatemala',
    '伯利兹': 'Belize',
    '萨尔瓦多': 'Salvador',
    '洪都拉斯': 'Honduras',
    '尼加拉瓜': 'Nicaragua',
    '哥斯达黎加': 'Costarica',
    '巴拿马': 'Panama',
    '巴哈马': 'Bahamas',
    '古巴': 'Cuba',
    '牙买加': 'Jamaica',
    '海地': 'Haiti',
    '多米尼加共和国': 'Dominican Republic',
    '安提瓜和巴布达': 'Antigua and Barbuda',
    '圣基茨和尼维斯': 'Saint Kitts and Nevis',
    '多米尼克': 'Dominica',
    '圣卢西亚': 'Saint Lucia',
    '圣文森特和格林纳丁斯': 'Saint Vincent and the Grenadines',
    '格林纳达': 'Grenada',
    '巴巴多斯': 'Barbados',
    '特立尼达和多巴哥': 'Trinidad and Tobago',
    '波多黎各': 'Porto Rico',
    '英属维尔京群岛': 'British Virgin Islands',
    '美属维尔京群岛': 'Virgin Islands of the United States',
    '安圭拉': 'Anguilla',
    '蒙特塞拉特': 'Montserrat',
    '瓜德罗普': 'Guadeloupe',
    '马提尼克': 'Martinique',
    '荷属安的列斯': 'Netherlands Antilles',
    '阿鲁巴': 'Aruba',
    '特克斯和凯科斯群岛': 'Turks And Caicos Islands',
    '开曼群岛': 'Cayman Islands',
    '百慕大': 'Bermuda',
    '哥伦比亚': 'Colombia',
    '委内瑞拉': 'Venezuela',
    '圭亚那': 'Guyana',
    '法属圭亚那': 'French Guiana',
    '苏里南': 'Suriname',
    '厄瓜多尔': 'Ecuador',
    '秘鲁': 'Peru',
    '玻利维亚': 'Bolivia',
    '巴西': 'Brazil',
    '智利': 'Chile',
    '阿根廷': 'Argentina',
    '乌拉圭': 'Uruguay',
    '巴拉圭': 'Paraguay'
}
pieces = [
    {'min': 1000000},
    {'min': 100000, 'max': 999999},
    {'min': 10000, 'max': 99999},
    {'min': 1000, 'max': 9999},
    {'min': 100, 'max': 999},
    {'min': 0, 'max': 99}
]

# 读取csv文件
df = pd.read_csv('world.csv')

# 转换国家英文名称
# 将国家列的值全部取出，判断是否存在name_map字典中，是返回英文，否返回中文
df['country_en'] = df['国家'].apply(lambda x: name_map[x] if x in name_map else x)

world_map = (
    # 设置地图大小
    Map(init_opts=opts.InitOpts(width='1400px', height='600px'))
    # 绘制世界地图，并添加参数，maptype就是地图类型，世界world，中国China
    # is_map_symbol_show=False不显示地图符号
    .add('累计确诊', [list(i) for i in zip(df['country_en'], df['累计确诊'])], 'world', is_map_symbol_show=False)
    .add('累计死亡', [list(i) for i in zip(df['country_en'], df['死亡人数'])], 'world', is_map_symbol_show=False)
    .set_series_opts(label_opts=opts.LabelOpts(is_show=False))
    .set_global_opts(
        # 设置标题
        title_opts=opts.TitleOpts(title='世界疫情情况'),
        # 设置视觉映射配置项
        visualmap_opts=opts.VisualMapOpts(max_=1000000, is_piecewise=True, pieces=pieces)
    )
)
# 渲染到HTML文件中
world_map.render('world_map.html')